package com.changgou.search.controller;

import com.changgou.common.entity.Page;
import com.changgou.search.pojo.SkuInfo;
import com.changgou.search.service.SearchService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.Map;
import java.util.Set;

@Controller
@RequestMapping("/search")
public class SearchController {

    @Autowired
    private SearchService searchService;

    @GetMapping("/list")
    public String list(@RequestParam Map<String,String> searchMap, Model model){
        //特殊符号处理
        this.handleSearchMap( searchMap );

        //获取查询结果
        Map resultMap = searchService.search( searchMap );
        model.addAttribute( "searchMap",searchMap );
        model.addAttribute( "result",resultMap );

        //拼接url
        StringBuilder url = new StringBuilder( "/search/list" );
        if (searchMap!=null && searchMap.size()>0){
            //有搜索条件
            url.append( "?" );
            for (String paramKey : searchMap.keySet()) {
                if (!"pageNum".equals( paramKey ) && !"pageSize".equals( paramKey ) && !"sortField".equals( paramKey ) && !"sortRule".equals( paramKey )){
                    url.append( paramKey ).append( "=" ).append( searchMap.get( paramKey ) ).append( "&" );
                }
            }
            String urlString = url.toString();
            urlString = urlString.substring( 0, urlString.length() - 1 );
            model.addAttribute( "url",urlString);
        }else{
            model.addAttribute( "url",url );
        }

        //封装分页数据并返回
        //总记录数、当前页、每页显示条数
        Page<SkuInfo> page = new Page<SkuInfo>(
                Long.parseLong( String.valueOf( resultMap.get( "total" ) ) ),
                Integer.parseInt( String.valueOf( resultMap.get( "pageNum" ) ) ),
                Page.pageSize
        );
        model.addAttribute( "page",page );

        return "search";

    }



    @GetMapping
    @ResponseBody
    public Map search(@RequestParam Map<String,String> searchMap){
        //特殊符号处理
        this.handleSearchMap(searchMap);

        Map searchResult = searchService.search( searchMap );
        return searchResult;
    }

    private void handleSearchMap(Map<String, String> searchMap) {
        Set<Map.Entry<String, String>> entrySet = searchMap.entrySet();
        for (Map.Entry<String, String> entry : entrySet) {
            if (entry.getKey().startsWith( "spec_" )){
                searchMap.put( entry.getKey(),entry.getValue().replace( "+","%2B" ) );
            }
        }
    }
}
